package cn.creditease.std.factory;

import cn.creditease.std.JobAlloter;
import cn.creditease.std.producer.Producer;
import cn.creditease.std.producer.impl.DbProducerImpl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;

/**
 * @Description: 任务生产者定义
 * @Author: kai.yang
 * @Date: 2019-08-02 14:46
 */
public interface JobAlloterFactory {

    /**
     * 默认的消费通道
     */
    Map<Integer, Producer> producers = new HashMap<Integer, Producer>() {
        {
            //初始话默认的数据库消费通道
            DbProducerImpl dbChannel = new DbProducerImpl();
            put(dbChannel.getOrder(), dbChannel);
        }
    };




    /**
     * 构建任务分发者
     *
     * @param sum 总条数
     * @param jobName 任务名
     * maxDuration 任务最大处理时长
     */

     JobAlloter getAlloter(int sum, String jobName, int maxDuration);


    /**
     * 获取配置的数据源
     */
    DataSource getDateSource();

    /**
     * 获取对应job组大最大任务数
     */
    int getMaxJobSize(String jobName);


    /**
     * 获取对应通道
     */
    List<Producer> getProducers();


    JobAlloterFactory startLisenter();

    /**
     * 多添加一条消费通道,相同key取最新一个
     */
    default JobAlloterFactory addProducer(Producer producer) {
        producers.put(producer.getOrder(), producer);
        return this;
    }


}
